# _*_coding:utf-8_*_
#04 节 2 数据预处理实现
#创建一个人工数据集，并储存在csv(逗号分隔值)文件
import os

import pandas as pd

os.makedirs(os.path.join('..','data',),exist_ok=True) #确保文件名data存在
data_file = os.path.join('..','data','house_tiny.csv')
with open(data_file,'w') as f:
    f.write('NumRooms,Alley,Price\n')   #每一列的名字 列表名靠写入文件的顺序决定
    f.write('NA,Pave,1111111\n')  #每行表示一个数据样本
    f.write('2,NA,444444\n')
    f.write('4,NA,222222\n')       #NA的意思是 该信息不知道
    f.write('NA,NA,333333\n')       #其中的数据分别和列表名相对应吧


 #这里的w是什么意思？
'''
    'r'       open for reading (default)
    'w'       open for writing, truncating the file first
    'x'       create a new file and open it for writing
'''

#从创建的csv文件中加载原始数据集   一般使用 pandas来读取csv文件 pandas也是和 numpy一样 是数据科学家常用的库
import pandas

data = pandas.read_csv(data_file)
print(data)
#自动给标号了
'''
   NumRooms Alley    Price
0       NaN  Pave  1111111
1       2.0   NaN   444444
2       4.0   NaN   222222
3       NaN   NaN   333333
'''

#为了处理缺失的数据，典型的方法 包括 插值 和 删除，这里，我们将考虑 插值
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
'''   
    NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
'''


#对于inputs中的 类别值 或 离散值 ，我们将“NaN”视为一个类别
inputs = pandas.get_dummies(inputs,dummy_na=True)
print(inputs)
'''
   NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
'''

#现在inputs和outputs 中的所有条目都是数值类型，它们可以转换为张量格式
import torch

x,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
print(x,y)
'''
tensor([[3., 1., 0.],
        [2., 0., 1.],
        [4., 0., 1.],
        [3., 0., 1.]], dtype=torch.float64) tensor([1111111,  444444,  222222,  333333])
'''

'''所用到的函数有
os:
os.path.join(‘..','data','abc')
os.makedirs(os.path.join('..','data',),exist_ok=True) #确保文件名data存在
os.makedirs(os.path.join('..','data'),exit_ok=True) #确保文件名存在
with open(文件名，'w')

pandas:
pamdas.read_csv()
pandas.get_dummies(文件名，dummy_na=True)

python:
data.iloc[]
inputs.mean()
inputs.fillna(inputs.mean())

torch:
inputs.values



'''